package com.smart.community.work.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 安保路线视图对象
 * 
 * 严格按照《Java后端SpringBoot代码开发规范_重构版.md》VO规范实现：
 * - 功能单一原则：VO类必须是单纯的数据展示对象，功能必须单一
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 字段映射：字段名与数据库字段名保持一致
 * - 数据格式：使用合适的数据类型，包含格式化后的显示数据
 * - 扩展字段：包含关联表的显示字段，如社区名称、状态描述等
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@Schema(description = "安保路线视图对象")
public class SecurityRouteVO {

    /**
     * 路线ID
     */
    @Schema(description = "路线ID", example = "1")
    private Long id;

    /**
     * 路线名称
     */
    @Schema(description = "路线名称", example = "A区巡逻路线")
    private String routeName;

    /**
     * 路线类型：patrol-巡逻，checkpoint-检查点
     */
    @Schema(description = "路线类型", example = "patrol")
    private String routeType;

    /**
     * 路线类型描述
     */
    @Schema(description = "路线类型描述", example = "巡逻路线")
    private String routeTypeDesc;

    /**
     * 路线描述
     */
    @Schema(description = "路线描述", example = "负责A区主要通道的巡逻检查")
    private String description;

    /**
     * 检查点列表（JSON格式）
     */
    @Schema(description = "检查点列表")
    private List<CheckpointVO> checkpoints;

    /**
     * 巡逻频次：hourly-每小时，every_2_hours-每2小时，daily-每日
     */
    @Schema(description = "巡逻频次", example = "daily")
    private String frequency;

    /**
     * 巡逻频次描述
     */
    @Schema(description = "巡逻频次描述", example = "每日")
    private String frequencyDesc;

    /**
     * 预计用时（分钟）
     */
    @Schema(description = "预计用时（分钟）", example = "60")
    private Integer durationMinutes;

    /**
     * 所属社区ID
     */
    @Schema(description = "所属社区ID", example = "1")
    private Long communityId;

    /**
     * 所属社区名称
     */
    @Schema(description = "所属社区名称", example = "阳光小区")
    private String communityName;

    /**
     * 状态：1-启用，2-停用
     */
    @Schema(description = "状态", example = "1")
    private Integer status;

    /**
     * 状态描述
     */
    @Schema(description = "状态描述", example = "启用")
    private String statusDesc;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间", example = "2025-01-30 10:00:00")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间", example = "2025-01-30 10:00:00")
    private LocalDateTime updateTime;

    /**
     * 创建人ID
     */
    @Schema(description = "创建人ID", example = "1")
    private Long createBy;

    /**
     * 创建人姓名
     */
    @Schema(description = "创建人姓名", example = "张三")
    private String createByName;

    /**
     * 更新人ID
     */
    @Schema(description = "更新人ID", example = "1")
    private Long updateBy;

    /**
     * 更新人姓名
     */
    @Schema(description = "更新人姓名", example = "张三")
    private String updateByName;

    /**
     * 检查点视图对象
     */
    @Data
    @Schema(description = "检查点视图对象")
    public static class CheckpointVO {

        /**
         * 检查点名称
         */
        @Schema(description = "检查点名称", example = "大门检查点")
        private String name;

        /**
         * 检查点描述
         */
        @Schema(description = "检查点描述", example = "检查大门安全状况")
        private String description;
    }
}
